<template>
  <div>
    <input type="text" v-model="user.id" />
    <input type="text" v-model="user.name" />
    <button @click="handleAdd">提交</button>
  </div>
  <ul>
    <li @click="handleDel(item.id)" v-for="item in state.arr" :key="item.id">
      {{ item.name }}
    </li>
  </ul>
</template>
<script>
import { reactive } from 'vue'
export default {
  setup() {
    const state = reactive({
      arr: [
        {
          id: 0,
          name: 'ifer',
        },
        {
          id: 1,
          name: 'elser',
        },
        {
          id: 2,
          name: 'xxx',
        },
      ],
    })
    const handleDel = (id) => {
      // 根据 id 找索引
      const idx = state.arr.findIndex((item) => item.id === id)
      // 根据索引去删除
      state.arr.splice(idx, 1)
    }
    // !#1 收集数据
    const user = reactive({
      id: '',
      name: '',
    })
    // !#2 把收集到的数据添加到 state.arr
    const handleAdd = () => {
      // 直接把 user 这个对象装进了 state.arr，导致 state.arr 里面的对象和 user 就是同一个，也就意味输入的时候会影响添加进去的那个数据
      // state.arr.push(user)
      // state.arr.push({ id: user.id, name: user.name })
      // 上面的简写
      // state.arr.push({ ...user })
      state.arr.push(Object.assign({}, user))
      user.id = ''
      user.name = ''
    }
    return {
      state,
      handleDel,
      user,
      handleAdd,
    }
  },
}
</script>
